MySQL Replication using Binary Log File Position 與 Global Transaction Identifiers(GTID) 不同,它使用二進制日志、中繼日志和索引文件來跟蹤主從數據庫之間的事件進度。GTID 可以與二進制/中繼日志一起使用,但是,從了解二進制日志文件位置開始是有益的。這里顯示的是設置新的主服務器和從服務器的步驟,包括如何記錄主日志位置以與從配置一起使用;導致主服務器和從服務器之間的數據一致。
這是使用二進制日志文件位置的 MySQL 復制設置過程的概述。作為參考以下提供的配置步驟的簡化指南:https://dev.mysql.com/doc/refman/5.7/en/replication-configuration.html
操作系統和 MySQL 版本
CentOS 7
MySQL 5.7
MySQL 定義
與 MySQL 復制一起使用的關鍵字/文件名
- Master?– 主數據庫服務器數據從
- 從站——一個或多個數據庫服務器數據被復制到
- 二進制日志文件——包含作為事件寫入的數據庫更新和更改
- 中繼日志文件——包含從主服務器的二進制日志讀取并由從 I/O 線程寫入的數據庫事件
- 索引文件——包含所有使用的二進制日志或中繼日志文件的名稱
- 主日志信息文件——包含主配置信息,包括用戶、主機、密碼、日志文件、主日志位置。在奴隸上找到
- 中繼日志信息文件——包含復制狀態信息。在奴隸上找到
- 全局事務標識符(GTID)?- 跟蹤復制位置的替代方法,不需要在從屬上啟用二進制日志(不與二進制日志文件位置一起使用)
1.設置MySQL
最新的存儲庫(MySQL 8.1)包括以前版本的 MySQL。添加存儲庫后,使用 yum-config-manager 禁用 mysql80-community 并啟用 mysql57-community;或直接編輯 /etc/yum.repos.d/mysql-community.repo。
- 添加 MySQL Yum 存儲庫
shell> sudo rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
- 安裝 MySQL 5.7
shell> sudo yum-config-manager --disable mysql80-community
shell> sudo yum-config-manager --enable mysql57-community
shell> sudo yum install mysql-community-server
shell> sudo systemctl start mysqld.service
- 重置 MySQL 根密碼
shell> sudo grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
2.設置主服務器
- 將以下內容添加到 /etc/my.cnf 的 [mysqld] 部分
[mysqld]
log-bin=mysql-bin
server-id=1
log-bin – 二進制日志文件名,默認存儲在 MySQL 數據目錄 /var/lib/mysql 中。
server-id=1 – 服務器的唯一標識符。如果未聲明,則默認為 0。如果設置為 0,與從服務器的連接將被拒絕。
重啟 MySQL
shell> sudo systemctl restart mysqld.service
- 創建 MySQL 復制用戶
mysql> CREATE USER 'replication'@'%.example.com' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%.example.com';
- 記錄從屬配置的Master二進制日志位置
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
mysql> UNLOCK TABLES;
3.設置從服務器
- 將以下內容添加到 /etc/my.cnf 的 [mysqld] 部分
[mysqld]
log-bin=mysql-bin
server-id=2
log-bin – 二進制日志文件名,默認存儲在 MySQL 數據目錄 /var/lib/mysql 中。
server-id=2 – 服務器的唯一標識符。如果未聲明,則默認為 0。如果設置為 0,與從服務器的連接將被拒絕。
- 使用步驟2c中記錄的主服務器復制位置信息進行配置。
mysql> 將主控更改為
-> ??MASTER_HOST='master_host_name',
-> ??MASTER_USER='replication_user_name',
-> ??MASTER_PASSWORD='replication_password',
-> ??MASTER_LOG_FILE='recorded_log_file_name',
-> ??MASTER_LOG_POS=recorded_log_position;
- 啟動 Slave 復制進程并查看狀態。
mysql> STOP SLAVE;
mysql> SHOW SLAVE STATUS\G;
結論
按照這些步驟,從服務器應該與主日志位置同步。這可以在 SHOW SLAVE STATUS\G 中讀??;輸出,這將在下一篇博文中討論。此外,有關 MySQL Replication GTID 設置、變量配置和維護的更多信息將成為后續博客文章的主題。